package rn;

import entidades.UnidadeMilitar;
import entidades.Usuario;
import excessoes.DAOException;
import fabricas.DAOFabrica;
import interfaces.InterfaceTramitacaoAnexoDAO;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import util.FacesUtil;
import entidades.AnexoProcesso;
import entidades.Setor;
import entidades.TramitacaoAnexo;

/**
 *
 * @author Marcelo Neto
 */
public class TramitacaoAnexoRN 
{
    private InterfaceTramitacaoAnexoDAO interfaceTramitacaoAnexoDAO;

    public TramitacaoAnexoRN() {
        this.interfaceTramitacaoAnexoDAO = DAOFabrica.criarTramitacaoAnexoDAO();
    }

    public TramitacaoAnexo carregarTramitacaoAnexo(Integer id) throws Exception {
        return this.interfaceTramitacaoAnexoDAO.carregarTramitacaoAnexo(id);
    }
    
    public String salvarTramitacaoAnexo(TramitacaoAnexo tramitacaoAnexo, Usuario usuario, Integer omDestino, Integer setorDestino, String despacho, Integer idanexo) throws DAOException, Exception 
    {
        Date dataAtual = new Date(System.currentTimeMillis());
        Integer idUnidadeUsu = usuario.getPessoa().getUnidade();
        Integer idSetorUsu = usuario.getPessoa().getSetor();
        String nomeUsuario = usuario.getPessoa().getPostoGraduacao()+" "+usuario.getPessoa().getNomeGuerra(); //Posto e nome do usuário na tabela TRAMITAÇÃO
            
        if (omDestino == null || omDestino == -1) {
            String msg = "É necessário selecionar a Unidade destino! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
            
        if (setorDestino == null || setorDestino == -1) {
            String msg = "É necessário selecionar o Setor destino! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
        
        if (despacho == null || despacho.equals("")) {
            String msg = "Campo Despacho obrigatório! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
            
        if ((setorDestino != null || setorDestino != -1) && (omDestino != null || omDestino != -1) && (despacho != null || !despacho.equals(""))) 
        {
            //Obtem a descrição da OM e do Setor
            UnidadeMilitarRN umRN = new UnidadeMilitarRN();
            // Carrega a sigla da Unidade destino
            UnidadeMilitar um = umRN.carregarUnidadeMilitar(omDestino);
            String omSigla = um.getSiglaOM();
            // Carrega a sigla da Unidade do rementente (usuário)
            UnidadeMilitar umu = umRN.carregarUnidadeMilitar(idUnidadeUsu);
            String omSiglaU = umu.getSiglaOM();
            // Carrega a sigla do Setor destino
            SetorRN stRN = new SetorRN();
            Setor st = stRN.carregarSetor(setorDestino);
            String stSigla = st.getSiglaSetor();
            // Carrega a sigla do Setor do rementente (usuário)
            Setor stu = stRN.carregarSetor(idSetorUsu);
            String stSiglaU = stu.getSiglaSetor();

            AnexoProcessoRN anexoProcessoRN = new AnexoProcessoRN();
            AnexoProcesso anexoProcesso = anexoProcessoRN.carregarAnexo(idanexo);
            anexoProcesso.setUnidadeAtual(omDestino);
            anexoProcesso.setSetorAtual(setorDestino);
            anexoProcesso.setEncaminhadoPor(nomeUsuario);
            anexoProcesso.setDataEntradaSetor(dataAtual);
            anexoProcesso.getTramitacaoAnexo().add(tramitacaoAnexo);

            tramitacaoAnexo.setDataTramitacao(dataAtual);
            tramitacaoAnexo.setRemetente(nomeUsuario);
            tramitacaoAnexo.setUnidadeRemetente(omSiglaU);
            tramitacaoAnexo.setSetorRemetente(stSiglaU);
            tramitacaoAnexo.setUnidadeDestino(omSigla);
            tramitacaoAnexo.setSetorDestino(stSigla);
            tramitacaoAnexo.setDespacho(despacho);
            tramitacaoAnexo.setAnexoProcesso(anexoProcesso);
            
            this.interfaceTramitacaoAnexoDAO.salvarTramitacaoAnexo(tramitacaoAnexo);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Anexo encaminhado com sucesso!", ""));
        }
        return null;
    }
    
    public List<TramitacaoAnexo> listarTramitacaoAnexo() {
        return this.interfaceTramitacaoAnexoDAO.listarTramitacaoAnexo();
    }
    
    public List<TramitacaoAnexo> listarTramitacaoAnexoPorSetor(Integer idsetor) 
    {
        List<TramitacaoAnexo> lista;
        lista = this.interfaceTramitacaoAnexoDAO.listarTramitacaoAnexoPorSetor(idsetor);
        if (lista.isEmpty() || lista == null) {
            //FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Não há informações para os parâmetros informados!", ""));
            return null;
        }
        return lista;
    }
    
    public List<TramitacaoAnexo> listarTramitacaoPorAnexo(Integer idanexo) {
        return this.interfaceTramitacaoAnexoDAO.listarTramitacaoPorAnexo(idanexo);
    }
}